Шаг 51 - Адресация к данным в стеке через BP.

Загрузить проект

С общими понятиями о стеке мы познакомились в Шаг 12 - Что такое стек. Там мы видели что работать со стеком можно командами push и pop. Но что если нам нужно будет узнать что же все таки храниться в стеке не забирая от туда значения? Из этого есть выход и здесь нам может помочь регистр bp. Вообще bp можно использовать свободно для многих целей, мы с Вами посмотрим пример на основе стека. Итак, код.

MODEL SMALL
STACK 256
CODESEG
Start:
	
	mov ax,@data 		; установка в ds адpеса
	mov ds,ax 		; сегмента данных
	mov ax,'F'
	push ax
	mov ax,'I'	
	push ax
	mov ax,'R'
	push ax
	mov ax,'S'	
	push ax
	mov ax,'T'	
	push ax
        mov cx,5			; счетчик
	mov bp,sp			; настраиваем bp

WriteLoop:
	mov dx,[bp]		; берем значение
	Call WriteChar
        add bp,2
loop WriteLoop

Exit:
	CALL ExitProgramm 

INCLUDE  function.asm 

End Start

Первыми командными мы помещаем данные в стек. Можно посмотреть что там адресовавшиcь ss:sp.

51_1.gif (4375 b)

Кто последним пришел тот в стеке первый. Последняя команда на данный момент.

mov ax,'T'	
push ax

Вот эта буква как раз в самом верху сейчас. Но в самом верху стека или внизу памяти. SP указывает на низ в памяти. Соответственно пройдя вверх можно исследовать что в стеке. Вот для этого мы регистр BP и настраиваем.

mov bp,sp

51_2.gif (1443 b)

А дальше мы начинаем в цикле выбирать значения по адресу bp постоянно его увеличивая на 2. Почему на 2? Вы сохраняли регистр AX он два байта, а нам нужен только один байт. Вот мы его и берем. Смотрим результат работы программы.

51_3.gif (4013 b)

Все нормально.

Hosted by uCoz